package com.woniuxy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.woniuxy.commons.utils.BeanCopyUtil;
import com.woniuxy.controller.form.GetAllStoreForm;
import com.woniuxy.dao.model.StoreInfo;
import com.woniuxy.dao.StoreInfoDao;
import com.woniuxy.service.StoreInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniuxy.service.dto.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 顾客信息 服务实现类
 * </p>
 *
 * @author psy
 * @since 2022-06-28
 */
@Service
public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoDao, StoreInfo> implements StoreInfoService {

    @Resource
    private StoreInfoDao storeInfoDao;

    @Autowired
    private StringRedisTemplate srt;

    /**
     * 超级管理员查询所有商家信息，分页
     * @param gasf
     * @return
     */
    @Override
    public PageGetAllStoreDto getAllStore(GetAllStoreForm gasf) {

        QueryWrapper<StoreInfo> qw = new QueryWrapper<>();
        if(gasf.getStoreName() != null){
            qw.like("storeName",gasf.getStoreName());
        }

        if(gasf.getLinkman() != null){
            qw.like("linkman",gasf.getLinkman());
        }

        IPage<StoreInfo> iPage = this.page(new Page<StoreInfo>(gasf.getPageNum(), gasf.getPageSize()), qw);

        PageGetAllStoreDto pageGetAllStoreDto = new PageGetAllStoreDto();

        List<AllStoreDto> allStoreDtos = new ArrayList<>();

        if(iPage.getRecords() != null && iPage.getRecords().size()>0){
            allStoreDtos = BeanCopyUtil.copyList(iPage.getRecords(),AllStoreDto.class);
        }

        pageGetAllStoreDto.setIndexPage(iPage.getCurrent());

        pageGetAllStoreDto.setTotal(iPage.getTotal());

        pageGetAllStoreDto.setStores(allStoreDtos);


        return pageGetAllStoreDto;
    }

    /**
     * 商家查询自己店铺的信息
     * @return
     * @throws JsonProcessingException
     */
    @Override
    public MyStoreDto getMyStore() throws JsonProcessingException {

        UserDetailsDto userDetailsDto = (UserDetailsDto) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        Long id = userDetailsDto.getId();

        String storeName = userDetailsDto.getUsername();

        StoreInfo storeInfo = storeInfoDao.selectOne(new QueryWrapper<StoreInfo>().eq("id", id));

        //把我的商家基本信息放入Redis中 通过ObjectMapper进行JSON字符串与java对象的序列化
        MyStoreDto myStoreDto = BeanCopyUtil.copyOne(storeInfo, MyStoreDto.class);

        ObjectMapper om = new ObjectMapper();

        String json = om.writeValueAsString(myStoreDto);

        srt.opsForValue().set("store:"+id,json);

        return myStoreDto;
    }
}
